package org.lanqiao.tjut.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.lanqiao.tjut.bean.TBStudentBean;
import org.lanqiao.tjut.db.DBFactory;
import org.lanqiao.tjut.myUtils.MyUtils;

public class StudentInfoModel {
	
	/**
	 * 根据Id主键参数（逻辑）删除学生信息
	 * @param stuId
	 *           主键
	 * @return   删除操作结果
	 */
	public int deleteStudentInfoById(String stuId){
		int re_i=0;
		//删除操作sql
		/**
		 * 逻辑删除：使用update修改标志位字段即可；
		 * 物理删除：使用delete语句进行删除操作即可；
		 * 注意：两种删除操作都要条件where，否则删除整张表的数据
		 */
		String sbSql=" update tbstudent set isdeleted=1 where stu_id=? ";
		//查询sql参数集
		List<Object> lstParas=new ArrayList<>();
		lstParas.add(stuId);
		//调用db层进行数据查询操作
		re_i=DBFactory.getDBDriverInstance().update(sbSql,lstParas.toArray());
		return re_i;
	}
	/**
	 * 根据Id主键参数查询学生信息
	 * @param stuId
	 *           主键
	 * @return   查询结果实体对象
	 */
	public TBStudentBean getStudentInfoById(String stuId){
		TBStudentBean stuB=null;
		//查询sql
		String sbSql=" select * from TBSTUDENT where isdeleted=0 and stu_id=? ";
		//查询sql参数集
		List<Object> lstParas=new ArrayList<>();
		lstParas.add(stuId);
		//调用db层进行数据查询操作
		stuB = DBFactory.getDBDriverInstance().query(sbSql.toString(), new BeanHandler<>(TBStudentBean.class), lstParas.toArray());
		return stuB;
	}
	/**
	 * 根据参数查询学生信息
	 * @param stuB
	 *           参数实体类
	 * @return   查询结果集
	 */
	public List<TBStudentBean> queryStudentInfoByParas(TBStudentBean stuB){
		List<TBStudentBean> lstStus=null;
		//查询sql
		StringBuilder sbSql=new StringBuilder("select * from TBSTUDENT where isdeleted=0");
		//查询sql参数集
		List<Object> lstParas=new ArrayList<>();
		if(stuB!=null){
			//学生姓名查询   需要使用模糊查询
			String stuName=stuB.getStu_name();
			if(stuName!=null && !stuName.equals("")){
				//拼写sql条件
				sbSql.append(" and Stu_name like ?");
				//添加参数
				lstParas.add("%" + stuName +"%");
			}
			
			//学生性别查询     使用非模糊查询
			String stuSex=stuB.getStu_sex();
			if(stuSex!=null && !stuSex.equals("")){
				//拼写sql条件
				sbSql.append(" and Stu_sex= ?");
				//添加参数
				lstParas.add(stuSex);
			}
			//学生出生日期开始时间
			Date stubirthday=stuB.getStu_birthday();
			if(stubirthday!=null){
				//拼写sql条件
				sbSql.append(" and Stu_birthday >=to_date(?,'yyyy-mm-dd hh24:mi:ss')");
				//添加参数
				lstParas.add(MyUtils.convertDate2String(stubirthday, "yyyy-MM-dd HH:mm:ss"));
			}
			//学生出生日期截止时间
			Date stubirthday2=stuB.getStu_birthday2();
			if(stubirthday2!=null){
				//拼写sql条件
				sbSql.append(" and Stu_birthday <=to_date(?,'yyyy-mm-dd hh24:mi:ss')");
				//添加参数
				lstParas.add(MyUtils.convertDate2String(stubirthday2, "yyyy-MM-dd HH:mm:ss"));
			}
			//学生地址查询   需要使用模糊查询
			String stuAddress=stuB.getStu_address();
			if(stuAddress!=null && !stuAddress.equals("")){
				//拼写sql条件
				sbSql.append(" and Stu_address like ?");
				//添加参数
				lstParas.add("%" + stuAddress +"%");
			}
			//学生电话查询   需要使用模糊查询
			String stuTel=stuB.getStu_tel();
			if(stuTel!=null && !stuTel.equals("")){
				//拼写sql条件
				sbSql.append(" and Stu_tel like ?");
				//添加参数
				lstParas.add("%" + stuTel +"%");
			}
		
			//学生系别查询     使用非模糊查询
			Integer stuDepartment=stuB.getStu_department();
			if( stuDepartment!=null){
				//拼写sql条件
				sbSql.append(" and Stu_department= ?");
				//添加参数
				lstParas.add(stuDepartment);
			}
  		}
		//主键字段倒叙排序
		sbSql.append(" order by stu_id desc");
		//调用db层进行数据查询操作
		lstStus=DBFactory.getDBDriverInstance().query(sbSql.toString(), new BeanListHandler<>(TBStudentBean.class), lstParas.toArray());
		//返回查询结果集
		return lstStus;
	}
	/**
	 * 保存或修改学生信息
	 * 
	 * @param stuB
	 *            学生信息的表单数据
	 * @return 修改保存的结果集的记录条数
	 */
	public int saveOrUpdateStudentInfo(TBStudentBean stuB) {
		// 默认返回值
		int re_i = 0;
		// 数据库操作sql语句
		StringBuilder sbSql=new StringBuilder();
		//数据库操作sql语句参数集合
		List<Object> lstParas=new ArrayList<>();
		if(stuB!=null&&stuB.getStu_id()==null){
		//新增部分操作
		sbSql.append(" insert into tbstudent(stu_name,stu_sex,stu_birthday,stu_address,stu_tel,stu_img,stu_department) "
				+ "values(?,?,to_date(?,'yyyy-mm-dd hh24:mi:ss'),?,?,?,?)");
		// sql语句的参数
		lstParas.add(stuB.getStu_name());
		lstParas.add(stuB.getStu_sex());
		lstParas.add(MyUtils.convertDate2String(stuB.getStu_birthday(), "yyyy-MM-dd HH:mm:ss"));
		lstParas.add(stuB.getStu_address());
		lstParas.add(stuB.getStu_tel());
		lstParas.add(stuB.getStu_img());
		lstParas.add(stuB.getStu_department());
		}else{
			//修改操作
			//图片如果为null，则不进行修改
			//修改操作的sql语句
			sbSql.append(" update tbstudent set stu_name=?,stu_sex=?,stu_birthday=to_date(?,'yyyy-mm-dd hh24:mi:ss'),"
					+ "stu_address=?,stu_tel=?,stu_department=? ");
			//拼写sql参数
			//添加sql参数
			lstParas.add(stuB.getStu_name());
			lstParas.add(stuB.getStu_sex());
			lstParas.add(MyUtils.convertDate2String(stuB.getStu_birthday(), "yyyy-MM-dd HH:mm:ss"));
			lstParas.add(stuB.getStu_address());
			lstParas.add(stuB.getStu_tel());
			lstParas.add(stuB.getStu_department());
			//根据img是否为null，进行修改图像操作
			if(stuB.getStu_img()!=null && !stuB.getStu_img().equals("")){
				//img属性修改语句
				sbSql.append(" ,Stu_img=? ");
				//添加sql参数
				lstParas.add(stuB.getStu_img());
			}
			//拼写where条件
			sbSql.append(" where Stu_id=? ");
			//添加sql参数
			lstParas.add(stuB.getStu_id());
		}
		re_i = DBFactory.getDBDriverInstance().update(sbSql.toString(), lstParas.toArray());
		return re_i;
	}
}
